package com.atguigu.lease.common.springmvc;

import com.atguigu.lease.common.result.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

//回顾： 1.@ControllerAdvice @RestControllerAdvice 2. 定义异常处理的方法即可 @ExceptionHandler(依赖类型.class)
//@RestControllerAdvice 是 Spring MVC 中一个非常实用的注解，它结合了 @ControllerAdvice 和 @ResponseBody 的功能，
// 主要用于全局处理控制器（Controller）层的异常、绑定异常、数据预处理等，并直接返回结构化的 JSON/XML 数据（适合 RESTful API 场景）。
@RestControllerAdvice
public class GlobalExceptionHandlers {
    /*
        public static Result<String> fail(String message) {
           Result<String> result = build(null);
           result.setCode(ResultCodeEnum.FAIL.getCode()); //201
           result.setMessage(message); //错误信息
           return result;
       }
    */
    @ExceptionHandler(Exception.class)
    public Result<String> exceptionHandler(Exception e){
        //记录日志
        e.printStackTrace();
        //返回提示
        return Result.fail(e.getMessage());
    }

    //接受自定义异常，业务失败的场景
    @ExceptionHandler(LeaseException.class)
    public Result<String> leaseExceptionHandler(LeaseException e){
        e.printStackTrace();
        return Result.fail(e.getCode(),e.getMessage());
    }
}
